package com.example.d4_homework.homework03;

import java.util.Random;
import java.util.function.Function;

public class Test {
    public static void main(String[] args) {
        // 定义一个存储学生姓名的数组
        String[] userNames = {"郭靖", "黄药师", "黄蓉", "欧阳锋", "老顽童", "瑛姑"};

        // 在等号右边补全代码实现getUserName方法调用
        /*String userName = getUserName(new Function<String[], String>() {
            @Override
            public String apply(String[] strings) {
                return userNames[new Random().nextInt(userNames.length)];
            }
        }, userNames);*/

        // 使用Lambda表达式简化
        String userName = getUserName((strings -> userNames[new Random().nextInt(userNames.length)]), userNames);

        // 输出
        System.out.println("请" + userName + "同学回答问题！");
    }

    /**
     * 从数组中随机获取一个元素返回
     * Function<T,R>是一个转换类型的接口,该接口的方法R apply(T t),表示将传入对象T类型,转成R类型输出并返回
     *
     * @param function  Function<String[], String>中,String[] 用来限定apply方法的参数类型  String用来限定方法的返回值类型
     * @param userNames 待转换的数组
     * @return 转换后的对象
     */
    public static String getUserName(Function<String[], String> function, String[] userNames) {
        return function.apply(userNames);
    }
}
